  <html>
<head>
<title>Remake de Fruity Frank - Version 0.25</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.SpanClass0 {
	color: #808080;
}
.SpanClass3 {
	color: #008080;
}
.SpanClass5 {
	font-weight: bold;
	color: #0000FF;
}
.SpanClass7 {
	color: #808080;
}
.SpanClass10 {
	font-weight: bold;
	color: #000080;
}
.SpanClass11 {
}
</style>
</head>
<body bgcolor="#FFFFFF">
<h2>Remake (parcial) de Fruity Frank... 25 - A&ntilde;adiendo efectos sonoros.</h2>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>

<p>Vamos a a&ntilde;adir sonidos al juego, para que tenga &quot;algo m&aacute;s de vida&quot;. Para conseguirlo, crearemos una nueva clase &quot;Sonido&quot;, que se apoyar&aacute; en &quot;Sdl_mixer&quot;, ocultando los detalles de esta librer&iacute;a.</p>

<p>Por ejemplo, el constructor se encargar&aacute; de cargar un fichero de m&uacute;sica:</p>

<pre><code>    /// Constructor a partir de un nombre de fichero
    public Sonido(string nombreFichero)
    {
      punteroInterno = SdlMixer.Mix_LoadMUS(nombreFichero);
    }</code></pre>  

<p>Y tendremos funciones para reproducir un sonido una vez (por ejemplo, cuando muere un enemigo, o nuestro personaje, o cuando recogemos una fruta), as&iacute; como para reproducir un sonido de forma continua (para la m&uacute;sica de fondo):</p>

<pre><code>    /// Reproducir una vez
    public  void Reproducir1()
    {
      SdlMixer.Mix_PlayMusic(punteroInterno, 1);
    }
    
    /// Reproducir continuo (musica de fondo)
    public  void ReproducirFondo()
    {
      SdlMixer.Mix_PlayMusic(punteroInterno, -1);
    } </code></pre>  

    
<p>Tambi&eacute;n necesitamos otra funci&oacute;n que permita dejar de reproducir sonidos:</p>

<pre><code>    /// Interrumpir toda la reproducci&oacute;n de sonido
    public  void Interrumpir()
    {
      SdlMixer.Mix_HaltMusic();
    }  </code></pre>  
        
    
<p><br />As&iacute;, cada nivel tendr&aacute; una m&uacute;sica de fondo. Esta m&uacute;sica se declara en la clase &quot;Nivel&quot; gen&eacute;rica:</p>

<pre><code>    public class Nivel
    {
      protected Sonido miMusicaFondo;
      ...</code></pre>  

<p>En la clase &quot;Nivel&quot; prepararemos tambi&eacute;n las funciones para reproducir su m&uacute;sica de fondo o para detenerla, ambas basadas en las posibilidades de la clase &quot;Sonido&quot;:</p>

<pre><code>    public void ReproducirMusica()
    {
      if (miMusicaFondo != null)
        miMusicaFondo.ReproducirFondo();
    }
    
    public void PararMusica()
    {
      if (miMusicaFondo != null)
        miMusicaFondo.Interrumpir();
    }</code></pre>  
      
<p>Y esa m&uacute;sica se cargar&aacute; en el constructor de cada "clase hija" (porque cada nivel concreto :</p>

<pre><code>    public class Nivel1: Nivel
    {

      const byte NUMENEMIGOS = 3;  
      
      public  Nivel1()
      {
        byte i;
        
        miMapa = new Mapa1();
        miMusicaFondo = new Sonido(&quot;sonidos\\fruity-nivel1.mp3&quot;);
        enemigos = new Enemigo[NUMENEMIGOS];
        ...</code></pre>  

<p>En el juego, tendremos una m&uacute;sica adicional para el cambio de nivel (todav&iacute;a no habr&aacute; sonido al recoger frutas ni al morir personajes), y entonces, cuando se cambio de nivel, deberemos parar la m&uacute;sica del nivel anterior, reproducir el sonido de cambio de nivel, y a continuaci&oacute;n comenzar a reproducir la m&uacute;sica de fondo del nuevo nivel, as&iacute;:</p>

<pre><code>    public  void SiguienteNivel()
    {
      miNivel.PararMusica();
      musicaNuevoNivel.Reproducir1();
      ...
      if (numeroNivel % 3 == 1)
          miNivel = new Nivel1();
      ...
      miNivel.ReproducirMusica(); </code></pre>  
    
<p><br />S&oacute;lo falta crear la carpeta sonidos, y guardar en ella los sonidos que nos interesan, que habremos capturado previamente del juego original, o bien habremos creado nosotros mismos. Tambi&eacute;n deberemos modificar los ficheros &quot;BAT&quot; encargados de compilar todos los fuentes, para que incluyan la nueva clase &quot;Sonido&quot;.</p>

<p>Como siempre, todo el fuente del proyecto est&aacute; en: <a href="http://code.google.com/p/fruityfrank"> code.google.com/p/fruityfrank</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
